﻿using System;
using System.Windows.Forms;

namespace Transfer
{
    public delegate void ProgressIndicator(int progr);

    public partial class MainForm : Form
    {

        public MainForm()
        {
            InitializeComponent();
        }

        /// <summary> Отображение прогресса выполнения
        /// </summary>
        /// <param name="progr"></param>
        public void ProgressShow(int progr)
        {
            if (progr < 0)
                progr = 0;
            if (progr > 100)
                progr = 100;
            this.Progress.Value = progr;
            Application.DoEvents();

        }

        /// <summary> Выбор файла - источника заказов
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFile_Click(object sender, EventArgs e)
        {
            openSourceDialog.FileName = txtFile.Text;

            openSourceDialog.RestoreDirectory = true;
            openSourceDialog.Multiselect = false;
            //openSourceDialog.Filter = "DBF-файлы (*.dbf)|*.*";
            openSourceDialog.SupportMultiDottedExtensions = false;
            openSourceDialog.Title = "Выбор файла - источника";

            if (openSourceDialog.ShowDialog() == DialogResult.OK)
            {
                txtFile.Text = openSourceDialog.FileName;
                SaveSetting();
            }
        }

        /// <summary> Сохранение внесенных в настройки изменений.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            SaveSetting();
            button1.Enabled = false;
        }

        /// <summary> Сохранение настроек
        /// </summary>
        private void SaveSetting()
        {
            Properties.Settings.Default.InputFileName = txtFile.Text;
            Properties.Settings.Default.PriceCode = txtPrice.Text;
            Properties.Settings.Default.BuyPriceCode = txtBuyPrices.Text;
            Properties.Settings.Default.TaxModel = txtTax.Text;
            Properties.Settings.Default.TaxValue = (txtTaxVal.Text.Trim() == String.Empty) ? 0: Convert.ToInt32(txtTaxVal.Text);
            Properties.Settings.Default.CodePost = txtCodePost.Text;
            Properties.Settings.Default.Save();
        }

        /// <summary> При изменении любого настроечного поля кнопка "Применить"
        /// становиться доступной.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SettingChanged(object sender, EventArgs e)
        {
            button1.Enabled = true;
        }

        /// <summary> Процедура начальной загрузки формы.
        /// Выполняем инициализацию настроек.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_Load(object sender, EventArgs e)
        {
            txtFile.Text = Properties.Settings.Default.InputFileName;
            txtPrice.Text = Properties.Settings.Default.PriceCode;
            txtBuyPrices.Text = Properties.Settings.Default.BuyPriceCode;
            txtTax.Text = Properties.Settings.Default.TaxModel;
            txtTaxVal.Text = Properties.Settings.Default.TaxValue.ToString();
            txtCodePost.Text = Properties.Settings.Default.CodePost;

            button1.Enabled = false;
            tabControl.TabPages.Remove(tabControl.TabPages["tabTest"]);

            this.Text = Application.ProductName + " V" + Application.ProductVersion;
        }

        /// <summary> Проверка параметров подключения к LAO
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLaoTest_Click(object sender, EventArgs e)
        {
            LAO_DB.LAO_Test();
        }

        /// <summary> Запуск загрузки документов
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLoad_Click(object sender, EventArgs e)
        {
            if (this.button1.Enabled)
            {
                MessageBox.Show("Перед запуском загрузки необходимо сохранить\r\n" +
                                "сделанные в настройках изменения.", "Transfer",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            this.btnLoad.Enabled = false;
            #region ["Подготовка протокола к работе"]
            txtLog.Clear();         // Чистим протокол
            Progress.Value = 0;
            Application.DoEvents(); // Чтобы видно было изменение
            SetText("====== Начало работы. === {0} ====== ", DateTime.Now);
            #endregion
            Transfer.Processing.Go(this, ProgressShow);
            this.btnLoad.Enabled = true;
        }

        /// <summary> Функция выводит форматированный текст в окно протокола.
        /// Текст всегда выводится с новой строки.
        /// </summary>
        /// <param name="text">Форматная строка</param>
        /// <param name="prm">Набор параметров</param>
        public void SetText(string text, params object[] prm)
        {
            string str = String.Format(text, prm);
            txtLog.AppendText("\r\n" + str);
        }

        #region ["Всяческие тесты"]
        /// <summary> Тестовая функция для проверки прейскуранта
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //Price prc = new Price();
            //testCena.Text = prc.GetPrice(testPrice.Text, testArt.Text, DateTime.Parse(testDate.Text)).ToString();
            //prc.Close();
        }

        /// <summary> Тестовая функция для проверки запретов.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            //ISkag kag = new ISkag("", "");
            //testLock.Checked = kag.GetLock(kag.FindByCode(testKag.Text),
            //    DateTime.Parse(testDatLock.Text));
            //kag.Close();
        }

        /// <summary> Вызов всяческих тестов
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            // Тестирование чтения из DBF-файла.
            UnitTests.DbfReader_Test(this.SetText);
        }
        
        #endregion
    }
}